perm filename CKMEM.PAS[TEX,ALS] blob sn#603451 filedate 1981-08-04 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00004 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	PROCEDURE ckals	(* main ALS memory checking routine *)
C00003 00003	PROCEDURE tracemem
C00009 00004	(* PROCEDURE CKMEM
C00021 ENDMK
CāŠ—;
PROCEDURE ckals;	(* main ALS memory checking routine *)
LABEL 1;
VAR P,Q: integer;
BEGIN
IF ALS>=0 THEN ckmem;
P:=ALS; Q:=ALS+1;
WHILE Q<>ALS DO
  BEGIN
  Q:=ALS;
  BEGIN END;					(* Set STOP here*)
  if ALS>2 then
    begin
    println(101); print(63); printint(ALS);
    searchmem(als);
    END
  ELSE
    BEGIN
    IF ALS=Q THEN GOTO 1;
    IF ALS=1 THEN checkmem(true);
    IF ALS=2 THEN checkmem(false);
    end;
  end;
1:
if ALS>2 then ALS:=P;
END;
*)
PROCEDURE tracemem;
LABEL 0,1;
VAR  c,p,q,L,LL,r,s,w: integer;
BEGIN
FOR p:=0 TO 24999 DO free[p]:=false;
p:=rover;
L:=mem[p].twohalves.lhword;
r:=mem[p].twohalves.rhword;
LL:=mem[p+1].twohalves.lhword;
s:=mem[p+1].twohalves.rhword;
c:=1; w:=s; 
FOR q:=p TO (p+s) DO free[q]:=true;
println(164);
println(164);
println(82); print(111); print(118); print(101); print(114);
printint(p); print(164);			(* Print Rover *)
p:=L;
print(82); print(108); print(105); print(110); print(107); (* Rlink *)
WHILE (p<25000) AND(p<>ROVER) DO
  BEGIN						(* Count all linked nodes *)
  L:=mem[p].twohalves.lhword;
  r:=mem[p].twohalves.rhword;
  LL:=mem[p+1].twohalves.lhword;
  s:=mem[p+1].twohalves.rhword;
  IF (r=65535) AND (((p+s)<L) OR ((L+1)<p)) AND free[L]=false THEN
    BEGIN 
    c:=c+1; w:=w+s;
    FOR q:=p TO (p+s) DO free[q]:=true;		(* mark all words as true *)
    q:=p;
    p:=L
    END
  ELSE
    BEGIN
    IF r<>65535 THEN
      BEGIN 
      println(141); printint(p);print(158);	(* NODE # bad *)
      print(164); printint(r);			(* ...# *)
      END					(* not free *)
    ELSE
      BEGIN
      println(158); print(164);			(* BAD *)
      print(357); printint(s); print(164);	(* size#... *)
      print(108); print(264);			(* L  AT *)
      printint(p); 				(* p *)
      print(111); print(102);			(* of *)
      printint(L); print(164);			(* L *)
      END;
    println(164); print(67); printint(c);           (* ...C# *)
    print(164); print(87); printint(w);            (* ...W# *)
    GOTO 0
    END;
  END;						(* Count all Rlinked nodes *)
0:
p:=rover;
L:=mem[p].twohalves.lhword;
r:=mem[p].twohalves.rhword;
LL:=mem[p+1].twohalves.lhword;
s:=mem[p+1].twohalves.rhword;
println(164);
println(76); print(108); print(105); print(110); print(107); (* Llink *)
printint(p);					(* Print Rover *)
p:=LL;
WHILE (p<25000) AND(p<>ROVER) DO
  BEGIN						(* Count all Llinked nodes *)
  L:=mem[p].twohalves.lhword;
  r:=mem[p].twohalves.rhword;
  LL:=mem[p+1].twohalves.lhword;
  s:=mem[p+1].twohalves.rhword;
  IF (r=65535) AND (((p+s)<LL) OR ((LL+1)<p)) AND free[LL]=false THEN
    BEGIN 
    c:=c+1; w:=w+s;
    FOR q:=p TO (p+s) DO free[q]:=true;		(* mark all words as true *)
    q:=p;
    p:=LL
    END
  ELSE
    BEGIN
    IF r<>65535 THEN
      BEGIN 
      println(141); printint(p);print(158);	(* NODE # bad *)
      print(164); printint(r);			(* ...# *)
      END					(* not free *)
    ELSE
      BEGIN
      println(158); print(164);			(* BAD *)
      print(357); printint(s); print(164);	(* size#... *)
      print(108); print(108); print(264);	(* LL  AT *)
      printint(p); 				(* p *)
      print(111); print(102);			(* of *)
      printint(LL); print(164);			(* LL *)
      END;
    println(164); print(67); printint(c);           (* ...C# *)
    print(164); print(87); printint(w);            (* ...W# *)
    GOTO 1
    END;
  END;						(* Count all Llinked nodes *)
1:
println(84); print(111); print(116); print(97); print(108);  (* Total *)
println(164); print(67); printint(c);		(* ...C# *)
 print(164); print(87); printint(w);		(* ...W# *)
c:=0; w:=0;
FOR p:=1 TO 24999 DO
  BEGIN					(* Look for an unlinked free nodes *)
  IF (free[p]=false) AND (mem[p].twohalves.rhword=65535) THEN
    BEGIN
    L:=mem[p].twohalves.lhword;
    LL:=mem[p+1].twohalves.lhword;
    s:=mem[p+1].twohalves.rhword;
    IF (L<25000) AND (LL<25000) AND (s<9) THEN
      BEGIN
      IF (mem[L+1].twohalves.lhword=p) OR (mem[LL].twohalves.lhword=p) THEN
	BEGIN
	c:=c+1; w:=w+s;
	END;
      END;
    END;
  END;
IF c>0 THEN
  BEGIN
  println(158);	print(158);			(* BAD BAD *)
  print(67); printint(c);			(* C# *)
  print(164); print(87); printint(w);		(* ... W# *)
  print(164);
  END;
END;

(* PROCEDURE CKMEM;
VAR L,LL,LLL,I,R,S: integer;
    blocksize,count: integer;
BEGIN
println(164);
I:=0;
WHILE mem[I].twohalves.rhword<>65535 DO  I:=I+1;	(* Get to start *)
blocksize:=0; count:=0;
WHILE I<25000 DO
  BEGIN
  R:=mem[I].twohalves.rhword;
  S:=mem[I+1].twohalves.rhword;				(* size *)
  L:=mem[I].twohalves.lhword;				(* link *)
  LL:=mem[I+1].twohalves.lhword;			(* llink *)
  IF R=65535 THEN 
    BEGIN					(* If R==65535 *)
    IF (S>0) AND ((I+S)<25000) THEN
      BEGIN					(* If S>0 AND I+S<25000 *)
      println(70); print(114); print(101); print(101);        (* Print Free *)
      print(164); printint(I);                              (* Print I *)
      print(164); print(76); print(61); printint(L);          (* PRINT L *)
      print(164); print(76); print(76); print(61); printint(LL); (* PRINT LL *)
      print(164); print(83); print(61); printint(S);          (* PRINT S *)
      blocksize:=0;
      I:=I+S;
      WHILE (mem[I].twohalves.rhword=65535) AND
	    (mem[I+1].twohalves.rhword>0) AND
		((I+mem[I+1].twohalves.rhword)<25000) do
        BEGIN					(* While S>0 AND I+S<25000 *)
	  S:=mem[I+1].twohalves.rhword;
	  blocksize:=blocksize+S;
	  count:=count+1;
	  I:=I+S;
        END;					(* While S>0 AND I+S<25000 *)
      IF blocksize>0 THEN
	BEGIN
	print(216); printint(blocksize);                  (* + available *)
	print(164); print(311); printint(count);          (* for count *)
	blocksize:=0; count:=0;
	END;
      END;					(* of IF S>0 AND I+S<25000 *)
    IF mem[I].TWOHALVES.RHWORD=65535 THEN
      BEGIN					(* Phony free node *)
      println(80); print(104); print(111); print(110); print(121);
      print(164); printint(I);                              (* I *)
      print(164); print(76); print(61);
      printint(mem[I].twohalves.lhword);                 (* Print link *)
      print(164); print(76); print(76); print(61);
      printint(mem[I+1].twohalves.lhword); print(164);   (* Print llink *)
      print(83); print(61); printint(mem[I+1].twohalves.rhword);
      IF I<25000 THEN I:=I+1;
      END;					(* Phony free node *)
    END;					(* If R=65535 *)
  R:=mem[I].twohalves.rhword;
  L:=mem[I].twohalves.lhword;				(* link *)
  LL:=mem[I+1].twohalves.lhword;			(* llink *)
  IF R<>65535 THEN 
    BEGIN					(* If R<>65535 *)
    count:=1;
    println(141); print(164); printint(I);            (* Node I *)
    L:=mem[I].twohalves.lhword;
    print(164); print(76); print(61); printint(L);    (* Print link *)
    IF ((L+1)<25000) AND (mem[L+1].twohalves.lhword=I) then
	 print(325)                                   (* Print ok *)
    else print(110); print(103);                      (* Print ng *)
    print(164); print(76); print(76); print(61);
    LL:=mem[I+1].twohalves.lhword;
    printint(LL);                                    (* Print llink *)
    IF (LL<25000) AND (mem[LL].twohalves.lhword=I) then
	 print(325)                                   (* Print ok *)
    else print(110); print(103);                      (* Print ng *)
    print(164); print(136); printint(mem[I].twohalves.byte2); (* Print typ *)
    IF ((LL-I)>1) AND ((LL-I)<9) THEN I:=LL
    ELSE IF I<24998 THEN I:=I+2;
    WHILE ((mem[I].twohalves.rhword<>65535)) AND (I<24999) DO
      BEGIN
      count:=count+1;
      I:=I+1;
      END;
    IF count>1 THEN
      BEGIN
      print(164); printint(count);
      END;
    END;					(* If R<>65535 *)
  END;						(* While I<25000 *)
println(164);
END;
*)
(* PROCEDURE tracemem;
LABEL 0,1;
VAR  c,p,q,L,LL,r,s,w: integer;
BEGIN
FOR p:=0 TO 24999 DO free[p]:=false;
p:=rover;
L:=mem[p].twohalves.lhword;
r:=mem[p].twohalves.rhword;
LL:=mem[p+1].twohalves.lhword;
s:=mem[p+1].twohalves.rhword;
c:=1; w:=s; 
FOR q:=p TO (p+s) DO free[q]:=true;
print(164);
print(82); print(111); print(118); print(101); print(114);
printint(p); print(164);			(* Print Rover *)
p:=L;
print(82); print(108); print(105); print(110); print(107); (* Rlink *)
print(164);
WHILE (p<25000) AND(p<>ROVER) DO
  BEGIN						(* Count all linked nodes *)
  L:=mem[p].twohalves.lhword;
  r:=mem[p].twohalves.rhword;
  LL:=mem[p+1].twohalves.lhword;
  s:=mem[p+1].twohalves.rhword;
  IF (r=65535) AND (((p+s-1)<L) OR ((L+s-1)<p)) AND free[p]=false THEN
    BEGIN 
    c:=c+1; w:=w+s;
    FOR q:=p TO (p+s-1) DO free[q]:=true;	(* mark all words as true *)
    q:=p;
    p:=L
    END
  ELSE
    BEGIN
    IF r<>65535 THEN
      BEGIN 
      println(141); printint(p);print(158);	(* NODE # bad *)
      print(164); printint(r); print(164);	(* ...# *)
      END					(* not free *)
    ELSE
      BEGIN
      print(164); print(158); print(164);	(* BAD *)
      print(357); printint(s); print(164);	(* size#... *)
      print(264);				(* AT *)
      printint(p); print(164);			(* p *)
      print(108); printint(L); print(164);	(* L *)
      END;
    println(164); print(67); printint(c);           (* ...C# *)
    print(164); print(87); printint(w);            (* ...W# *)
    GOTO 0
    END;
  END;						(* Count all Rlinked nodes *)
0:
p:=rover;
L:=mem[p].twohalves.lhword;
r:=mem[p].twohalves.rhword;
LL:=mem[p+1].twohalves.lhword;
s:=mem[p+1].twohalves.rhword;
println(164);
println(76); print(108); print(105); print(110); print(107); (* Llink *)
p:=LL;
WHILE (p<25000) AND(p<>ROVER) DO
  BEGIN						(* Count all Llinked nodes *)
  L:=mem[p].twohalves.lhword;
  r:=mem[p].twohalves.rhword;
  LL:=mem[p+1].twohalves.lhword;
  s:=mem[p+1].twohalves.rhword;
  IF (r=65535) AND (((p+s-1)<LL) OR ((LL+s-1)<p)) AND free[p]=false THEN
    BEGIN 
    c:=c+1; w:=w+s;
    FOR q:=p TO (p+s-1) DO free[q]:=true;	(* mark all words as true *)
    q:=p;
    p:=LL
    END
  ELSE
    BEGIN
    IF r<>65535 THEN
      BEGIN 
      println(141); printint(p);print(158);	(* NODE # bad *)
      print(164); printint(r);			(* ...# *)
      END					(* not free *)
    ELSE
      BEGIN
      println(158); print(164);			(* BAD *)
      print(357); printint(s); print(164);	(* size#... *)
      print(264);				(* AT *)
      printint(p); print(164);			(* p *)
      print(108);
      print(108); printint(LL); print(164);	(* LL *)
      END;
    println(164); print(67); printint(c);           (* ...C# *)
    print(164); print(87); printint(w);            (* ...W# *)
    GOTO 1
    END;
  END;						(* Count all Llinked nodes *)
1:
println(84); print(111); print(116); print(97); print(108);  (* Total *)
println(164); print(67); printint(c);		(* ...C# *)
 print(164); print(87); printint(w);		(* ...W# *)
c:=0; w:=0;
FOR p:=1 TO 24999 DO
  BEGIN					(* Look for an unlinked free nodes *)
  IF (free[p]=false) AND (mem[p].twohalves.rhword=65535) THEN
    BEGIN
    L:=mem[p].twohalves.lhword;
    LL:=mem[p+1].twohalves.lhword;
    s:=mem[p+1].twohalves.rhword;
    IF (L<25000) AND (LL<25000) AND (s<9) THEN
      BEGIN
      IF (mem[L+1].twohalves.lhword=p) OR (mem[LL].twohalves.lhword=p) THEN
	BEGIN
	c:=c+1; w:=w+s;
	END;
      END;
    END;
  END;
IF c>0 THEN
  BEGIN
  print(164);
  print(158);print(164); print(158);			(* BAD BAD *)
  print(164); print(67); printint(c);			(* C# *)
  print(164); print(87); printint(w);		(* ... W# *)
  println(164);
  END;
println(65); print(118); print(97); print(105); print(108); (* Avail *)
p:=mem[49152].twohalves.lhword;
c:=0;
WHILE p<>0 do
  BEGIN
  p:=mem[p].twohalves.lhword;
  c:=c+1;
  END;
print(164); printint(c);
println(164); println(164);
END;
*)